﻿using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Contratos.Aseguradora;
using MJD.Comunes.DtoEntidades;
using Presentadores.Aseguradoras;

namespace MJD.Empresas
{
    /// <summary>
    /// Clase que controla los componentes de la vista
    /// </summary>
    public partial class AdministrarAseguradoras : Page, IGestionarAseguradora
    {
        #region Atributos

        /// <summary>
        /// Objeto que posee las propiedades del presentador de la vista
        /// </summary>
        private PresentadorGestionarAseguradora _presentador;


        /// <summary>
        /// Objeto que posee las propiedades de las ventana hija para agregar sucursal
        /// </summary>
        private AgregarSucursal _ventanaHija;


        /// <summary>
        /// Objeto que posee las propiedaeds de la ventana de confirmacion
        /// </summary>
        private ConfirmationWindow _ventanaConfirmacion;

        #endregion

        #region Constructores

        /// <summary>
        /// Constructor de la clase que inicializa los componentes de la misma
        /// </summary>
        public AdministrarAseguradoras()
        {
            InitializeComponent();
            _presentador = new PresentadorGestionarAseguradora(this);
        }

        #endregion
        
        #region Eventos


        /// <summary>
        /// Evento cuando el usuairo entra en la pagin
        /// </summary>
        /// <param name="e"></param>
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            //_presentador.CargarPagina();
        }


        /// <summary> Evento que se ejecuta cuando da click al boton buscar </summary>
        /// <param name="sender">Objeto que realiza el evento</param>
        /// <param name="e">objeto que posee arguemto del evento</param>
        private void BtnBuscarClick(object sender, RoutedEventArgs e)
        {

        }


        /// <summary> Metodo que se ejecuta cuando se la da click en agregar sucursal </summary>
        /// <param name="sender">Objeto que realiza el evento</param>
        /// <param name="e">objeto que posee arguemto del evento</param>
        private void BtnAgregarSucursalAseguradoraClick(object sender, RoutedEventArgs e)
        {
            _presentador.AgregarNuevaSucursal();
        }

        
        /// <summary> Metodo que se ejecuta cuando se la click al boton de agregar aseguradora </summary>
        /// <param name="sender">Objeto que realiza el evento</param>
        /// <param name="e">objeto que posee arguemto del evento</param>
        private void BtnAgregarAseguradoraClick(object sender, RoutedEventArgs e)
        {
            _presentador.AgregarAseguradora();
        }


        /// <summary> Metodo que se ejecuta cuando se la click al boton de agregar nueva aseguradora </summary>
        /// <param name="sender">Objeto que realiza el evento</param>
        /// <param name="e">objeto que posee arguemto del evento</param>
        private void BtnAgregarNuevaAseguradoraClick(object sender, RoutedEventArgs e)
        {
            _presentador.HabilitarInsercionAseguradora();
        }
        

        /// <summary> Evento que se ejecuta cuando se dal click al boton de aceptar de la venta hija </summary>
        /// <param name="sender">Objeto que realiza el evento</param>
        /// <param name="e">objeto que posee arguemto del evento</param>
        private void VentanaAceptarClicked(object sender, System.EventArgs e)
        {
            _presentador.AgregarSucursal();
        }

        #endregion

        #region Propiedades

        /// <summary>
        /// Propiedad que devuelve el valor del panel con los datos para buscar aseguradoras
        /// </summary>
        public Canvas PanelBuscarAseguradoras
        {
            get { return cvBusqueda; }
        }


        /// <summary>
        /// Propiedad que devuelve el valor del panel con los datos basicos de la aseguradoras
        /// </summary>
        public Canvas PanelDatosAseguradoras
        {
            get { return cvDatosPrincipales; }
        }


        /// <summary>
        /// Propiedad que devuelve el valor del panel con la lista de aseguradoras
        /// </summary>
        public Canvas PanelListaAseguradoras
        {
            get { return cvListaAseguradoras; }
        }


        /// <summary>
        /// Propiedad que devuelve el valor del panel con la lista de sucursales de la aseguradora
        /// </summary>
        public Canvas PanelListaSucursales
        {
            get { return cvSucursales; }
        }


        /// <summary>
        /// Propiedad que devuelve el valor del textbox para los datos principales de la aseguradora
        /// </summary>
        public TextBox NombreAseguradora
        {
            get { return tbNombreEmpresa; }
        }


        /// <summary>
        /// Propiedad que devuelve el valor del textbox donde va el numero de rif de la aseguradora
        /// </summary>
        public TextBox NumeroRif
        {
            get { return tbNumeroRif; }
        }


        /// <summary>
        /// Propiedad que devuelve el valor del textbox donde va el codigo de area de la aseguradora
        /// </summary>
        public TextBox CodigoArea
        {
            get { return cbCodigoArea; }
        }


        /// <summary>
        /// Propiedad que devuelve el valor del control donde va el numero de telefono de la aseguradora
        /// </summary>
        public TextBox NumeroTelefono
        {
            get { return cbNumeroTelefono; }
        }


        /// <summary>
        /// Propiedad que devuelve el valor del control que lista las letras de rif
        /// </summary>
        public ComboBox LetraRif
        {
            get { return cbLetraRif; }
        }


        /// <summary>
        /// Propiedad que devuelve el valor del textbox del nombre para la busqueda de la aseguradora
        /// </summary>
        public TextBox NombreAseguradoraBusqueda
        {
            get { return tbNombreEmpresaBusqueda; }
        }


        /// <summary>
        /// Propiedad que devuelve el valor del textbox donde va el numero de rif de la aseguradora para la busqueda
        /// </summary>
        public TextBox NumeroRifBusqueda
        {
            get { return tbNumeroRif; }
        }


        /// <summary>
        /// Propiedad que devuelve el valor del control que lista las letras de rif para la busqueda
        /// </summary>
        public ComboBox LetraRifBusqueda
        {
            get { return cbLetraRifBusqueda; }
        }


        /// <summary>
        /// Boton que agrega una aseguradora
        /// </summary>
        public Button AgregarAseguradora
        {
            get { return btnAgregarAseguradora; }
        }


        /// <summary>
        /// Propiedad que devuelve el valor del grid que maneja la lista de aseguradoras
        /// </summary>
        public DataGrid ListaAseguradoras
        {
            get { return dgListaAseguradoras; }
        }


        /// <summary>
        /// Propiedad que devuelve el valor del grid que maneja la lista de sucursales
        /// </summary>
        public DataGrid ListaSucursales
        {
            get { return dgListaSucursales; }
        }


        /// <summary> Metodo que habilita la vista para mostrar los datos de una nueva sucursal </summary>
        /// <param name="agregar"> true si la vista es para agregar false si la vista es para editar</param>
        /// <param name="sucursal">datos de la sucursal a editar en caso de edicion </param>
        public void MostrarAgregarSucursal(bool agregar, DtoSucursal sucursal)
        {
            _ventanaHija = agregar ? new AgregarSucursal() : new AgregarSucursal(sucursal);
            _ventanaHija.AceptarClicked += VentanaAceptarClicked;
            _ventanaHija.Show();
        }

        /// <summary>
        /// propiedad que devuelve el valor de la venta hija para agregar una nueva sucursal
        /// </summary>
        public IAgregarSucursal VentanaSucursal
        {
            get { return _ventanaHija; }
        }


        /// <summary> Metodo que muestra un mensaje de notificacion</summary>
        /// <param name="mensaje">mensaje a mostrar</param>
        public void MostrarMensajeNotificacion(string mensaje)
        {
            NotificationWindow ventana = new NotificationWindow(mensaje);
            ventana.Show();

        }


        /// <summary> Metodo que muestra un mensaje de error </summary>
        /// <param name="mensaje">mensaje a mostrar</param>
        public void MostrarMensajeError(string mensaje)
        {
            ErrorWindow ventana = new ErrorWindow(mensaje);
            ventana.Show();
        }

        /// <summary> Metodo que muestra un mensaje de confirmacion </summary>
        /// <param name="mensaje">mensaje a mostrar</param>
        public void MostrarMensajeConfirmacion(string mensaje)
        {
            _ventanaConfirmacion = new ConfirmationWindow(mensaje);
            _ventanaConfirmacion.ButtonClicked += _presentador.ConfirmacionAgregarOModificarAseguradora;
            _ventanaConfirmacion.Show();
        }


        /// <summary> Metodo que redirecciona a la ruta indicada </summary>
        /// <param name="ruta">ruta a la cual se redireccionara</param>
        public void Redireccionar(string ruta)
        {
            throw new System.NotImplementedException();
        }

        #endregion
    }
}
